//
//  OAuthViewController.swift
//  01MicroBlog
//
//  Created by Apple on 15/7/30.
//  Copyright © 2015年 heima. All rights reserved.
//

import UIKit
import SVProgressHUD

class OAuthViewController: UIViewController, UIWebViewDelegate {
    
    // 让控制器的View是webView
    override func loadView() {
        webView = UIWebView()
        view = webView
        webView?.delegate = self
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()

        let urlStr = NetworkTools.sharedNetworkTools.getUrlStr()
        let url = NSURL(string: urlStr)
        webView?.loadRequest(NSURLRequest(URL: url!))
        
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "关闭", style: UIBarButtonItemStyle.Plain, target: self, action: "close")
    }
    
    // MARK:点击关闭按钮
    func close() {
        SVProgressHUD.dismiss()
        dismissViewControllerAnimated(true) { () -> Void in
        }
    }
    
     private var webView:UIWebView?
    
    
    func webViewDidStartLoad(webView: UIWebView) {
        // 显示圆圈
        SVProgressHUD.show()
    }
    
    func webViewDidFinishLoad(webView: UIWebView) {
        // 显示消失的圆圈
        SVProgressHUD.dismiss()
    }
    
    // 是否要继续加载网页
    // TODO:这个方法没怎么搞清楚
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
        // 获取url全部路径，判断请求的 URL 中是否包含回调地址
        let urlStr = request.URL?.absoluteString
        
        // 判断url的字符串中有没有重定向地址。如果没有，该加载什么页面就加载什么页面
        if !urlStr!.hasPrefix(NetworkTools.sharedNetworkTools.redirecturi) {
            return true
        }
        
        // 有重定向地址的时候，判断？后面是不是有code前缀。如果没有前缀，则是 “授权取消”
        let queryStr = request.URL?.query
        if let _ = queryStr where !queryStr!.hasPrefix("code=")  {
            close()
            
            // 取消的时候，不继续加载网页
            return false
        }
        
        // ？后面有code前缀，表示允许授权。截取code后面的授权码
        let code = queryStr?.substringFromIndex(advance(queryStr!.startIndex, "code=".characters.count))
        
        // 测试下授权码
        print(code!)
        
        // 拿着code，去拿令牌信息
        self.loadAccessToken(code!)
        
        // 授权后，不加载网页
        return false
    }
    
    // MARK: - 请求令牌数据
    private func loadAccessToken(code:String) {
        // MARK: - 加载用户信息
        // MARK: - 根据code,去拿令牌数据
        NetworkTools.sharedNetworkTools.loadAccessToken(code) { (result, error) -> () in
            if error != nil || result == nil {
                self.netError()
                return
            }
                // MARK: - 授权登录后，进入用户登录界面
        
//                print(result)
                // MARK: - 在这里字典转模型
            
                // 字典转模型
                // 1. 用 token 获取的信息创建用户账户模型
                // 2. 异步加载用户信息
                // 3. 保存用户信息(模型中完成)
                UserAccount(dict: result!).loadUserInfo({ (error) -> () in
                    if error != nil {
                        self.netError()
                        return
                    }
                    
                    // 利用通知，切换控制器
                    NSNotificationCenter.defaultCenter().postNotificationName(WJRootViewControllerSwitchNotification, object: false)
                })
            
        }
    }
    
    
/// 网络不给力的情况
    private func netError() {
        SVProgressHUD.showErrorWithStatus("您的网络不给力")
        // 延迟
        let when = dispatch_time(DISPATCH_TIME_NOW, Int64(1 * NSEC_PER_SEC))
        dispatch_after(when, dispatch_get_main_queue(), { () -> Void in
            self.close()
            return
        })
    }


}
